package com.cykj.pos.controller.api;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cykj.common.core.domain.AjaxResult;
import com.cykj.common.core.domain.entity.SysUser;
import com.cykj.pos.domain.BizAgentOpenAccount;
import com.cykj.pos.domain.BizPosErminalRate;
import com.cykj.pos.domain.BizRateDataList;
import com.cykj.pos.domain.BizTerminalRateList;
import com.cykj.pos.domain.dto.BizTerminalListDTO;
import com.cykj.pos.domain.posone.BizRateDataDTO;
import com.cykj.pos.domain.posone.BizTerminalRateListOtherDTO;
import com.cykj.pos.service.IBizAgentOpenAccountService;
import com.cykj.pos.service.IBizMerchantService;
import com.cykj.pos.service.IBizRateDataService;
import com.cykj.pos.service.IBizTerminalRateListService;
import com.cykj.pos.util.UUIDUtil;
import com.cykj.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;

@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/noauth/posv1terminallist" )
@Api(tags = "费率信息")
public class PosV1TerminalList {

    private final IBizTerminalRateListService iBizTerminalRateListService;

    private final IBizRateDataService iBizRateDataService;

    private final ISysUserService iSysUserService;

    private final IBizAgentOpenAccountService bizAgentOpenAccountService;

    private final IBizMerchantService bizMerchantService;

    /**
     * 下拉信息
     * @param sysUser
     * @return
     */
    @ApiOperation("邀请费率下拉")
    @PostMapping("/getBizTerminalRateList")
    public AjaxResult getBizTerminalRateList(@RequestBody SysUser sysUser){
        AjaxResult ajaxResult=AjaxResult.success();
        SysUser sysUser1 = iSysUserService.selectUserById(sysUser.getUserId());
        LambdaQueryWrapper<BizAgentOpenAccount> le = Wrappers.lambdaQuery();
        le.eq(BizAgentOpenAccount::getAccountId,sysUser1.getAccountId());
        BizAgentOpenAccount bizAgentOpenAccount = bizAgentOpenAccountService.getOne(le);

        BizTerminalRateListOtherDTO bizTerminalRateListDTO = new BizTerminalRateListOtherDTO();
        if (null!=bizAgentOpenAccount.getRatet0()){
            BizRateDataDTO rateT0 = iBizTerminalRateListService.getBizRateDataById(bizAgentOpenAccount.getRatet0());
            bizTerminalRateListDTO.setRateT0(rateT0);
        }
        if (null!=bizAgentOpenAccount.getQrsettleRate()){
            BizRateDataDTO qrsettleRate = iBizTerminalRateListService.getBizRateDataById(bizAgentOpenAccount.getQrsettleRate());
            bizTerminalRateListDTO.setQrsettleRate(qrsettleRate);
        }

        BizTerminalListDTO bizTerminalListDTO1 =new BizTerminalListDTO();
        bizTerminalListDTO1.setRateT0list(iBizRateDataService.getBizrateList("2"));
        Iterator<BizRateDataList> itT1 = bizTerminalListDTO1.getRateT0list().iterator();
        while(itT1.hasNext()){
            BigDecimal bigDecimal = new BigDecimal(bizTerminalRateListDTO.getRateT0().getNickName());
            BigDecimal num = new BigDecimal(itT1.next().getNickName());
            if (bigDecimal.compareTo(num) == 1){
                itT1.remove();
            }
        }
        bizTerminalListDTO1.setSettlementQrT0list(iBizRateDataService.getBizrateList("4"));
        Iterator<BizRateDataList> itT0 = bizTerminalListDTO1.getSettlementQrT0list().iterator();
        while(itT0.hasNext()){
            BigDecimal bigDecimal = new BigDecimal(bizTerminalRateListDTO.getQrsettleRate().getNickName());
            BigDecimal num = new BigDecimal(itT0.next().getNickName());
            if (bigDecimal.compareTo(num)== 1){
                itT0.remove();
            }
        }
        ajaxResult.put("data",bizTerminalListDTO1);
        System.out.println(ajaxResult);
        return ajaxResult;
    }

    /**
     * 添加商户费率信息
     * @param bizTerminalRateList
     * @return
     */
    @PostMapping("/postOpenAccount")
    @Transactional
    public AjaxResult postOpenAccount(@RequestBody BizTerminalRateList bizTerminalRateList){
        AjaxResult ajaxResult = AjaxResult.success("添加成功");
        bizTerminalRateList.setParentUserId(UUIDUtil.getUUID());
         System.out.println(bizTerminalRateList);
       /* int row1 = iBizTerminalRateListService.insterbizMerchantReturnMoney(bizTerminalRateList);
        System.out.println(bizTerminalRateList.getId());*/
        int row = iBizTerminalRateListService.postOpenAccount(bizTerminalRateList);
        Long accountId = iBizTerminalRateListService.getaccountId(bizTerminalRateList.getParentUserId());
        System.out.println("返回accountId"+accountId);
        if (row>0 ){
            ajaxResult.put("data",accountId);
            return ajaxResult;
        }
        return AjaxResult.error("添加失败");
    }

    /**
     * 查询费率信息
     * @param sysUser
     * @return
     */
    @PostMapping("/getBizTerminalRateLists")
    public AjaxResult getBizTerminalRateLists(@RequestBody SysUser sysUser){
        AjaxResult ajaxResult=AjaxResult.success("查询费率信息");
        BizTerminalRateListOtherDTO bizTerminalRateListDTO = new BizTerminalRateListOtherDTO();
        BizTerminalRateList bizTerminalRateLists = iBizTerminalRateListService.getopenaccountOne(Long.parseLong(sysUser.getAccountId()));
        if (null!=bizTerminalRateLists.getRateT0()){
            BizRateDataDTO rateT0 = iBizTerminalRateListService.getBizRateDataById(bizTerminalRateLists.getRateT0());
            bizTerminalRateListDTO.setRateT0(rateT0);
        }
        if (null!=bizTerminalRateLists.getQrsettleRate()){
            BizRateDataDTO SettlementQrT0 = iBizTerminalRateListService.getBizRateDataById(bizTerminalRateLists.getQrsettleRate());
            bizTerminalRateListDTO.setQrsettleRate(SettlementQrT0);
        }
        bizTerminalRateListDTO.setServerThirtySix(bizTerminalRateLists.getServerThirtySix());
        bizTerminalRateListDTO.setServerFortyNine(bizTerminalRateLists.getServerFortyNine());
        bizTerminalRateListDTO.setServerTwoFour(bizTerminalRateLists.getServerTwoFour());
        bizTerminalRateListDTO.setServerFortyEight(bizTerminalRateLists.getServerFortyEight());
        bizTerminalRateListDTO.setServerSixty(bizTerminalRateLists.getServerSixty());
        bizTerminalRateListDTO.setServerNinetyNine(bizTerminalRateLists.getServerNinetyNine());
        bizTerminalRateListDTO.setServerOneNinetyNine(bizTerminalRateLists.getServerOneNinetyNine());
        bizTerminalRateListDTO.setServerTwoNinetyNine(bizTerminalRateLists.getServerTwoNinetyNine());
        bizTerminalRateListDTO.setServerThreeNinetyNine(bizTerminalRateLists.getServerThreeNinetyNine());
        bizTerminalRateListDTO.setFlowTwoFour(bizTerminalRateLists.getFlowTwoFour());
        bizTerminalRateListDTO.setFlowThirtySix(bizTerminalRateLists.getFlowThirtySix());
        bizTerminalRateListDTO.setFlowFortyEight(bizTerminalRateLists.getFlowFortyEight());
        bizTerminalRateListDTO.setFlowSixty(bizTerminalRateLists.getFlowSixty());
        bizTerminalRateListDTO.setFlowSixtyLkl(bizTerminalRateLists.getFlowSixtyLkl());
        bizTerminalRateListDTO.setFlowSixtyHyb(bizTerminalRateLists.getFlowSixtyHyb());
        bizTerminalRateListDTO.setFlowNinetyNine(bizTerminalRateLists.getFlowNinetyNine());
        bizTerminalRateListDTO.setServerSwitch(bizTerminalRateLists.getServerSwitch());
        bizTerminalRateListDTO.setAccountId(Long.parseLong(sysUser.getAccountId()));
        ajaxResult.put("data",bizTerminalRateListDTO);
        return ajaxResult;
    }

    /**
     * 修改费率
     * @param bizTerminalRateList
     * @return
     */
    @PostMapping("/putOpenAccount")
    public AjaxResult putOpenAccount(@RequestBody BizTerminalRateList bizTerminalRateList){
        AjaxResult ajaxResult = AjaxResult.success("修改费率");
        int rows = iBizTerminalRateListService.putOpenAccount(bizTerminalRateList);
        if (rows>0){
            ajaxResult.put("accountId",bizTerminalRateList.getAccountId());
            return ajaxResult;
        }
        return AjaxResult.error("修改失败");
    }

    @ApiOperation("我的费率")
    @GetMapping(value = "/{userId}")
    public AjaxResult findMyRate(@PathVariable("userId") Long userId) {
        return AjaxResult.success("获取成功", iBizTerminalRateListService.findMyRate(userId));
    }

    @ApiOperation("查询费率")
    @PostMapping(value = "/selectMyRate")
    public AjaxResult selectFindMyRate(@RequestBody String feeChlId) {
        JSONObject jsonObject = new JSONObject(feeChlId);
        BizPosErminalRate bizPosErminalRate= iBizTerminalRateListService.selectFindMyRate( jsonObject.getString("feeChlId"));
        if (bizPosErminalRate != null) {
            return AjaxResult.success("获取成功",bizPosErminalRate);
        }else {
            return AjaxResult.error("获取失败");
        }
    }
}
